The powerful functionality and low cost of small, relatively powerful microprocessors and microcontrollers has resulted in their expansion into a variety of new uses. Where formerly microprocessors were used mainly for relatively complex tasks, their low cost now allows them to substitute at lower cost for conventional or special purpose circuits. At the same time, their power allows them to handle additional functions in a particular application that conventional circuits cannot.
One situation where this is particularly true is in distributed control or process management. Imagine a system where there are a large number of different functions that are performed at various locations throughout the system, and which functions must be coordinated with each other. Some of these functions are requests or initiations of actions, perhaps by a human, perhaps by another node in response to a detected condition. Others are the actions themselves.
The modern auto is a pertinent example. There are literally scores of different electrical functions that are initiated at various places throughout an automobile. A few of these functions are locking and unlocking doors, handling engine functions such as ignition and fuel injection, sensing and displaying status such as speed and oil pressure, indicating burned out lights and improperly closed doors, sensing accelerator position, etc. The conventional approach dedicates one or more conductors to each of these functions. For example, a wire directly connects a door lock with the switch that opens that lock, a wire connects the oil pressure gauge with the oil pressure sensor, a wire connects the door covering the fuel cap to the switch that opens it, and wires run from the ignition control to each of the ignition components. A moment's consideration shows that an automobile using such conventional connections of these related functions requires perhaps hundreds of dedicated wires.
This conventional structure has a number of disadvantages particularly in automated or semi-automated assembly. In the first place, failed or defective dedicated wires are expensive to correct. How can one easily run a replacement wire from the dashboard to the trunk? The large number of wires makes miswiring easy during manufacture not least because color coding a large number of individual wires is complicated and expensive. The sheer number of wires connecting components located throughout the automobile becomes expensive to provide and install. The large number of wires occupies a significant volume within the auto. As the number of wires in an auto increases, the wires become increasingly vulnerable to damage or failure for a variety of reasons, and leading to less reliability. Other systems both more complicated and less complicated than autos, have similar problems with handling the proliferation of wires between the various functional elements.
One solution to many of these problems makes use of the previously mentioned microprocessors. Instead of dedicated wires between related components, a single serial signal path often comprising a pair of signal wires, and a single power wire pair are connected to all or at least a group of the components. Each component includes a communicator or node that can send messages to and receive messages from the other components' nodes on the signal path. Each node receives every message on the signal wires and uses the messages appropriate for operating its component.
A problem recognized for a very long time is that of message collisions, where two or more nodes send messages on the signal wires at the same time. One solution is that of the CAN (controller area network) system. In the CAN system, messages are encoded in binary signals that are either dominant or recessive bits. If a communicator sends a dominant bit signal, the dominant bit is present on the signal path regardless of the number of recessive bits sent by other communicators. Each communicator senses the signal on the signal path, and ceases sending its message if, when sending a recessive bit, the node senses a dominant bit. This process of each node detecting collisions and ceasing message sending upon detecting a collision is called arbitration. The CAN system is explained in more detail in U.S. Pat. Nos. 5,001,642 and 5,303,348.
Typically, each type of message has a unique leading ID portion. This assures that eventually only one message survives arbitration. The node sending the surviving message continues sending until the message is completed, at which time all of the nodes wait for a short period of time, and then as many as have messages to send, start sending new messages.
One problem with the CAN system is assuring that every node has an opportunity to complete its messages. If the signal path is fully occupied by messages having ID portions with dominant bits early in the message, then other messages will be delayed excessively. Of course, if there is so much signal path traffic that not every signal can be sent, then the system is overloaded, and potentially important messages will never be sent. We assume that the system is not overloaded long term, but may have brief periods where a number of nodes have messages that have lost arbitration.
The ID portions assigned to particular messages have inherent priority in them, in that earlier and greater number of dominant bits in a message assure higher priority for that message relative to messages not having ID's with as many and early dominant signals. But we still find that some messages are not sent as promptly as we prefer. We also find that the fixed priority inherent in the assigned ID format is not flexible enough for some types of system operation.